let app = getApp()
Page({

  /**
   * 页面的初始数据
   */
  data: {
    url: '',
    id: 0,
    FM: null,
    FMs: [],
    pageNum: 1,
    pageSize: 3,
    innerAudioContext: null, 
    isPlaying: false,
    currentTime: 0, 
    duration: 1800 // 默认30分钟（1800秒）
  },

  /**
   * 初始化音频上下文
   */
  initAudioContext() {
    try {
      // 先销毁可能存在的音频上下文
      if (this.data.innerAudioContext) {
        this.data.innerAudioContext.destroy()
      }
      
      const innerAudioContext = wx.createInnerAudioContext()
      if (!innerAudioContext) {
        throw new Error('创建音频上下文失败')
      }
      
      this.setData({ innerAudioContext })

      // 音频开始播放回调
      innerAudioContext.onPlay(() => {
        console.log('音频开始播放')
        this.setData({ isPlaying: true })
      })

      // 音频暂停回调
      innerAudioContext.onPause(() => {
        console.log('音频暂停')
        this.setData({ isPlaying: false })
      })

      // 音频错误回调
      innerAudioContext.onError((res) => {
        console.error('音频播放错误：', res.errMsg, res.errCode)
        wx.showToast({
          title: `播放失败: ${res.errMsg}`,
          icon: 'none',
          duration: 3000
        })
        this.setData({ isPlaying: false })
      })

      // 播放进度更新回调
      innerAudioContext.onTimeUpdate(() => {
        if (typeof innerAudioContext.currentTime === 'number') {
          const current = Math.floor(innerAudioContext.currentTime)
          this.setData({ currentTime: current })
        }
      })
      
      // 播放结束回调
      innerAudioContext.onEnded(() => {
        console.log('音频播放结束')
        this.setData({
          isPlaying: false,
          currentTime: 0
        })
        this.seekAudio(0)
      })
    } catch (e) {
      console.error('初始化音频上下文出错:', e)
      wx.showToast({
        title: '音频初始化失败',
        icon: 'none'
      })
    }
  },

  /**
   * 获取节目列表
   */
  getFMs() {
    if (!this.data.url) {
      console.error('API地址未设置')
      return
    }
    
    wx.request({
      url: `${this.data.url}FM/getPages`,
      data: {
        pageSize: this.data.pageSize,
        pageNum: this.data.pageNum
      },
      method: 'GET',
      success: (resp) => {
        if (resp.data && resp.data.data && resp.data.data.list) {
          this.setData({
            FMs: resp.data.data.list
          })
          console.log('节目列表：', resp.data.data.list)
        } else {
          console.error('节目列表数据格式错误', resp.data)
          wx.showToast({
            title: '获取节目列表失败',
            icon: 'none'
          })
        }
      },
      fail: (err) => {
        console.error('获取节目列表失败', err)
        wx.showToast({
          title: '网络请求失败',
          icon: 'none'
        })
      }
    })
  },

  /**
   * 获取节目详情
   */
  getFMDetail() {
    if (!this.data.url || !this.data.id) {
      console.error('API地址或节目ID未设置')
      return
    }
    
    wx.request({
      url: `${this.data.url}FM/${this.data.id}`,
      method: 'GET',
      success: (resp) => {
        if (resp.data && resp.data.data) {
          this.setData({ FM: resp.data.data })
          console.log('节目详情：', resp.data.data)
          
          // 设置音频源
          if (resp.data.data.audioPath && this.data.innerAudioContext) {
            const audioUrl = `${this.data.url}${resp.data.data.audioPath}`
            this.data.innerAudioContext.src = audioUrl
            
            // 获取音频时长
            this.data.innerAudioContext.onCanplay(() => {
              setTimeout(() => {
                if (typeof this.data.innerAudioContext.duration === 'number') {
                  const dur = Math.floor(this.data.innerAudioContext.duration)
                  this.setData({ duration: dur || 1800 })
                }
              }, 1000)
            })
          }
        } else {
          console.error('节目详情数据格式错误', resp.data)
          wx.showToast({
            title: '获取节目详情失败',
            icon: 'none'
          })
        }
      },
      fail: (err) => {
        console.error('获取节目详情失败', err)
        wx.showToast({
          title: '网络请求失败',
          icon: 'none'
        })
      }
    })
  },

  /**
   * 切换播放/暂停
   */
  togglePlay() {
    const { innerAudioContext, isPlaying } = this.data
    
    // 检查音频上下文是否存在
    if (!innerAudioContext) {
      wx.showToast({ title: '音频未初始化', icon: 'none' })
      this.initAudioContext()
      return
    }
    
    // 检查音频源是否存在
    if (!innerAudioContext.src) {
      wx.showToast({ title: '音频资源不存在', icon: 'none' })
      return
    }
    
    // 执行播放/暂停操作
    isPlaying ? innerAudioContext.pause() : innerAudioContext.play()
  },

  /**
   * 调整播放进度
   */
  changeProgress(e) {
    const position = e.detail.value
    this.seekAudio(position)
  },

  /**
   * 音频定位
   */
  seekAudio(position) {
    if (this.data.innerAudioContext && !isNaN(position)) {
      this.data.innerAudioContext.seek(position)
      this.setData({ currentTime: position })
    }
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    console.log('节目ID：', options.id)
    if (options.id) {
      this.setData({
        url: app.globalData.url || '',
        id: options.id
      })
      this.initAudioContext()
      this.getFMDetail()
      this.getFMs()
    } else {
      wx.showToast({
        title: '缺少节目ID',
        icon: 'none'
      })
      // 延迟返回上一页
      setTimeout(() => {
        wx.navigateBack()
      }, 1500)
    }
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    // 安全销毁音频上下文
    if (this.data && this.data.innerAudioContext) {
      try {
        this.data.innerAudioContext.stop()
        this.data.innerAudioContext.destroy()
        this.setData({ innerAudioContext: null })
      } catch (e) {
        console.error('销毁音频上下文失败:', e)
      }
    }
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
    if (this.data.innerAudioContext && this.data.isPlaying) {
      this.data.innerAudioContext.pause()
    }
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 页面重新显示时恢复播放状态（可选）
    // if (this.data.innerAudioContext && !this.data.isPlaying && this.data.currentTime > 0) {
    //   this.data.innerAudioContext.play()
    // }
  },

  /**
   * 其他生命周期函数
   */
  onReady() {},
  onPullDownRefresh() {},
  onReachBottom() {},

  /**
   * 分享功能
   */
  onShareAppMessage() {
    return {
      title: this.data.FM?.name || '心理疗愈节目',
      path: `/pages/fm-detail/fm-detail?id=${this.data.id}`
    }
  }
})